package model

import (
	"fmt"
	"gitee.com/liumou_site/logger"
	"net"
	"time"
)

// CheckSSHListening 检查本机的SSH端口是否在监听状态。
// 该函数会尝试连接本机的SSH端口，如果连接成功则说明SSH服务正在监听。
//
// 返回值:
//   - error: 如果连接失败或关闭连接时出错，返回相应的错误信息；否则返回nil。
func CheckSSHListening(i Info) error {
	// 延时3秒，等待SSH服务启动
	time.Sleep(3 * time.Second)
	// 尝试通过TCP连接本机的SSH端口，设置超时时间为2秒
	conn, err := net.DialTimeout("tcp", fmt.Sprintf("127.0.0.1:%d", i.Port), 2*time.Second)
	if err != nil {
		GetLanguageManager().Error("连接本地主机失败: ", "Failed to connect to localhost: ", err)
		return err
	}

	// 关闭连接，如果关闭时出错则记录错误日志
	err = conn.Close()
	if err != nil {
		GetLanguageManager().Error("关闭连接失败: ", "Failed to close connection: ", err)
		return nil
	}

	return nil
}

// CheckAndRestartService 创建一个独立函数按顺序运行多个函数。
func CheckAndRestartService(i *Info) error {
	if i.Debug {
		logger.Debug("CheckAndRestartService")
	}
	if CheckSSHListening(*i) != nil {
		GetLanguageManager().Warn("SSH未监听,正在尝试启动...", "SSH is not listening, trying to start...")
		err := i.RestartSshdService()
		if err != nil {
			GetLanguageManager().Error("SSH服务重启失败,正在尝试重置...", "Failed to restart SSH service:", err)
			return err
		}
		GetLanguageManager().Info("SSH服务重启成功", "SSH Service Restart successful")
	} else {
		if i.Debug {
			GetLanguageManager().Debug("SSH服务正在运行中...", "SSH Service Is Running")
		}
	}
	return CheckSSHListening(*i)
}
